//
//  FYComposeTextView+Extension.swift
//  Mircore
//
//  Created by apple on 16/8/20.
//  Copyright © 2016年 飞羽. All rights reserved.
//

import UIKit


extension   FYComposeTextView {

  //通过遍历富文本获取字符串基本信息
    
    var  emoticonText: String  {
    
    //info  富文本的信息
        
        //range  富文本的范围
        
        //是否停止  stop -> stop.memory  = true
        
        
        var  result = ""
        
        self.attributedText.enumerateAttributesInRange(NSMakeRange(0, self.attributedText.length), options: []) { (info, range, stop)  -> Void  in
            
            if  let  attachment  = info["NSAttachment"]  as?   FYTextAttachment {
            
            //表示图片富文本
                
                let  emoticon  =  attachment.emoticon!
                
                //获取表情描述
                
                result += emoticon.chs!
            
            }else {
            
            //获取文本富文本的字符串  通过指定的范围获取富文本然后在获取富文本对应的字符串
                
                result += self.attributedText.attributedSubstringFromRange(range).string
            
            }
        }
    
       return result
    
    }

 
    
    //插入表情富文本的方法
    
    func  insertEmoticon(emoticon: FYEmoticon) {
    
     //通过不同的表情类型设置不同表情内容
        
        if  emoticon.type == "0" {
        
        
        //记录上一次的富文本
        
        let  originalAttributeStr  = NSMutableAttributedString(attributedString: self.attributedText)
        
            
            //通过表情模型创建富文本对象
            
            let  attributedStr  = NSAttributedString.attributedStringWithEmoticon(emoticon, font: self.font!)
            
            //获取选中的富文本的范围
            
            var  range = self.selectedRange
            
            
            //设置选中范围的富文本
            
            originalAttributeStr.replaceCharactersInRange(range, withAttributedString: attributedStr)
            
            //设置富文本字体的大小
            
            originalAttributeStr.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, originalAttributeStr.length))
            
            //设置富文本
            
            self.attributedText  = originalAttributeStr
            
            //添加一个表情富文本让其光标位置+1  让选中范围设置为0
            
            range.location  += 1;  range.length  = 0
            
            
            //设置选中范围
            
            self.selectedRange  = range
            
            
            //自己发送文字改变的通知
            
             NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: nil)
            
            //  自己通过代理对象调用代理方法
            //  如果使用! 表示我们确定代理对象已经实现这个代理方法, 没有实现就崩溃
            //  如果使用? 表示代理对象如果实现了代理方法那么可以直接执行,否则不执行直接返回nil
            //  使用!和?都可以, 但是为了安全可以使用?更好一些
            
            self.delegate?.textViewDidChange?(self)
            
        }else  {
        
         self.insertText((emoticon.code! as  NSString).emoji())
        }
     }
 
}